PHP recursie
Home

PHP recursie

PHP recursie

Recursief programmeren wil zeggen dat je een functie schrijft die zichzelf oproept.

Recursie gebruiken om waarden in een multidimensionale array af te drukken

Dit is een eenvoudige handleiding voor het afdrukken van de sleutels en waarden van een multidimensionale array. Voor dit specifieke voorbeeld gaan we ervan uit dat we niet weten hoeveel niveaus de array in kwestie zal hebben. d.w.z. we zullen een klein script bouwen dat alle sleutels en waarden in een gegeven array weergeeft, ongeacht hoeveel niveaus het heeft.

Video

Voorbeeld

De onderstaande functie echoArrayRecursive doorloopt elke waarde in de meegegeven array. Binnen de lus hebben we een if-controlestructuur, die controleert of de huidige waarde een array is. Als de waarde in kwestie een array is, geven we die als argument door aan dezelfde functie echoArrayRecursive zodat hetzelfde proces kan worden herhaald.

Als de waarde geen array is, wordt deze op de afgedrukt.

function echoArrayRecursive($array){
    foreach($array as $key => $value){
        //If $value is an array.
        if(is_array($value)){
            //We need to loop through it.
            echoArrayRecursive($value);
        } else{
            //It is not an array, so print it out.
            echo $value, '<br>';
        }
    }
}

We declaren een associatieve array:

$book = array(
    'Title' => 'L\'être et le néant',
    'Author' => 'Jean-Paul Sartre',
    'Detail' => array(
        'Publisher' => 'Gallimard',
        'Date' => '1943'
    ));

En tonen de inhoud ervan:

echoArrayRecursive($book);

Met dit als resultaat:

recursion print associative array
recursion print associative array

Nu, een 1 dimensionele array:

$sampleNumbers = array(10, 5, 3, 8, 20, 7, 4, 1, 3, 12, 14, 6, 4, 1, 1);
echoArrayRecursive($sampleNumbers);

Probeer het zelf uit! Maak enkele arrays en geef die als parameter aan deze functie mee. Als het om programmeren gaat, is het beter om je handen uit de mouwen te steken.

Inspringen

Wat als we de waarden willen laten inspringen terwijl we ze afdrukken? Wat als we willen zien op welk niveau elke waarde in de array staat?

In dit geval voegen we een andere parameter toe met de naam $level, die met 1 wordt vermeerderd telkens we "een stap naar beneden doen":

function echoArrayRecursiveIndent($array, $level = 1){
    foreach($array as $key => $value){
        //If $value is an array.
        if(is_array($value)){
            //We need to loop through it.
            echoArrayRecursiveIndent($value, ++$level);
        } else{
            //It is not an array, so print it out.
            echo str_repeat('-', $level), $value, '<br>';
        }
    }
}

Zoals je kunt zien, heeft $level een standaardwaarde van 1. We stellen dit argument met een standaardwaarde zodat we die functie kunnen oproepen zonder de waarde 1 als argument te moeten weergeven. De eerste keer dat die functie wordt opgeroepen is de waarde van dit argument telkens 1. Telkens als we de functie recursief oproepen, wordt de $level variabele met 1 vermeerderd.

We gebruiken dan de functie str_repeat om het koppelteken een bepaald aantal keren te herhalen. In dit geval gebruiken we onze $level variabele als de vermenigvuldiger. Dat wil zeggen dat als $level gelijk is aan twee, er twee koppeltekens op de pagina worden afgedrukt.

We proberen deze functie uit met de $book array van hierboven:

echoArrayRecursiveIndent($book);

Met dit als resultaat:

recursion print associative array with indentation
recursion print associative array with indentation

Sleutels afdrukken

Het afdrukken van de sleutels in de array is triviaal als je eenmaal weet hoe je recursie moet gebruiken om de waarden ervan af te drukken.

We moeten maar één kleine wijziging aan de oorspronkelijke functie aanbrengen:

function echoArrayRecursiveWithKey($array){
    foreach($array as $key => $value){
        //If $value is an array.
        if(is_array($value)){
            //We need to loop through it.
            echoArrayRecursiveWithKey($value);
        } else{
            //It is not an array, so print it out.
            echo "$key: $value <br>";
        }
    }
}

We proberen deze functie uit met de $book array van hierboven:

echoArrayRecursiveWithKey($book);

Met dit als resultaat:

recursion print associative array with key
recursion print associative array with key

JI
2021-02-27 17:00:15